#include "thread.hpp"
#include "thread_pool.hpp"
#include <unistd.h>
#include <vector>


using namespace ThreadModule;
using namespace ThreadPoolModule;

void func1()
{
    LOG((const int)LogLevel::DEBUG) << "我是一个下载任务!";
}

void func2()
{
    LOG((const int)LogLevel::DEBUG) << "我是一个更新任务!";
}

void func3()
{
    LOG((const int)LogLevel::DEBUG) << "我是一个删除任务!";
}
int main()
{
    ThreadPool<func_t>& pool = ThreadPool<func_t>::GetInstance();
    pool.Start();
    sleep(1);
    pool.Equeue(func1);
    sleep(1);
    pool.Equeue(func2);
    sleep(1);
    pool.Equeue(func3);
    LOG((const int)LogLevel::DEBUG);
    pool.Stop();
    sleep(10);
    pool.Join();

    // std::vector<Thread> threads;
    // for (int i = 0; i < 5; i++)
    // {
    //     threads.emplace_back([]()
    //                          {
    //     int cnt = 5;
    //     while(cnt--)
    //     {
    //         char name[128];
    //         pthread_getname_np(pthread_self(), name, sizeof(name));
    //         std::cout << "我是一个新线程: " << name << std::endl; // 我的线程的名字是什么呀？debug
    //         sleep(1);
    //     } });
    // }
    // for (auto &thread : threads)
    // {
    //     thread.Start();
    // }

    // for (auto &thread : threads)
    // {
    //     thread.Detach();
    // }

    // for (auto &thread : threads)
    // {
    //     thread.Stop();
    // }

    // for (auto &thread : threads)
    // {
    //     thread.Join();
    // }

    // Thread t([](){
    //     while(true)
    //     {
    //         char name[128];
    //         pthread_getname_np(pthread_self(), name, sizeof(name));
    //         std::cout << "我是一个新线程: " << name << std::endl; // 我的线程的名字是什么呀？debug
    //         sleep(1);
    //     }
    // });
    // t.Start();
    // t.Detach();
    // sleep(5);

    // t.Stop();

    // sleep(5);

    // t.Join();

    return 0;
}